var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
    next(createError(404));
});


//开启一个ws
const WebSocket = require('ws');
const wss = new WebSocket.Server({port: 8800});
wss.on('connection', function connection(ws) {
    ws.on('message', function incoming(message) {
        console.log('received: %s', message);
        const {port, ip} = JSON.parse(message);
        //广播消息
        // wss.clients.forEach(function each(client) {
        //   console.log(client,'client')
        //   if (client.readyState === WebSocket.OPEN) {
        //     client.send(message);
        //   }
        // });
        //发起tcp到
        try {
            console.log(port, ip, 'port, ip')
            const net = require('net');
            const client = new net.Socket();
            console.log(111)

            client.connect(port, ip, function () {
                console.log('Connected');
                client.write('Hello, server! Love, Client.');
            });
            console.log(111)
            // client.on('data', function (data) {
            //     console.log('Received: ' + data);
            //     ws.send(data);
            //     // client.destroy(); // kill client after server's response
            // });
            // client.on('close', function () {
            //     console.log('Connection closed');
            // });

        } catch (e) {
            console.log('e111')
        }


    });
    ws.send('something');
});


// error handler
app.use(function (err, req, res, next) {
    // set locals, only providing error in development
    console.log('浏览器打开 http://localhost:3000/ 查看效果');
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
    res.render('error');
});

module.exports = app;
